package edu.eam.tallermecanicoejb.beans;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import edu.eam.tallermecanicojpa.dao.VisitaDAO;
import edu.eam.tallermecanicojpa.entidades.Visita;

/**
 * Session bean de la visita
 */
@Stateless
@LocalBean
public class VisitaBean {

	@PersistenceContext
	/**
	 * EntityManager para manejar las transacciones de la visita con la base de
	 * datos
	 */
	private EntityManager entityManager;

	/* Data Acces Object de la visita */
	private VisitaDAO visitaDAO;

	/* Constructor del visitaBean vacio */
	public VisitaBean() {
		super();
	}

	@PostConstruct
	/* Metodo para inicializar el VisitaDAO */
	public void inicializarVisitaDAO() {
		visitaDAO = new VisitaDAO(entityManager);
	}

	/**
	 * Metodo para persistir una visita en la base de datos
	 * 
	 * @param visita
	 *            Visita que se quiere persistir en la base de datos
	 */
	public void persistir(Visita visita) {
		visitaDAO.persistir(visita);
	}

	/**
	 * Metodo para actualizar una visita en la base de datos
	 * 
	 * @param visita
	 *            Visita que se quiere actualizar en la base de datos
	 */
	public void actualizar(Visita visita) {
		visitaDAO.actualizar(visita);
	}

	/**
	 * Metodo para recuperar una visita de la base de datos conociendo su numero
	 * de identificacion
	 * 
	 * @param id
	 *            Numero de identificacion de la visita que se quiere recuperar
	 *            de la base de datos
	 * @return La visita que se encontro con el id o null si no se encontro
	 */
	public Visita recuperar(long id) throws Exception {
		return visitaDAO.recuperar(id);
	}

	/**
	 * Metodo para eliminar una visita de la base de datos
	 * 
	 * @param visita
	 *            Visita que se quiere eliminar de la base de datos
	 */
	public void eliminar(Visita visita) {
		visitaDAO.eliminar(visita);
	}

	/* Metodo para listar todas las visitas al taller mecanico */
	public List<Visita> listar() {
		return visitaDAO.listar();
	}

	/**
	 * Metodo para recuperar una visita y sus repuestosVisita conociendo su
	 * numero de identificacion
	 * 
	 * @param id
	 *            Numero de identificacion de la visita que se quiere recuperar
	 *            de la base de datos
	 * @return La visita que se encontro con el id o null si no se encontro
	 */
	public Visita recuperarConRepuestos(long id) throws Exception {
		return visitaDAO.recuperarConRepuestos(id);
	}

	/* Metodo para listar todas las visitas con sus repuestosVisita */
	public List<Visita> listarConRepuestos() {
		return visitaDAO.listarConRepuestos();
	}
}
